<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 流年 <liu21st@gmail.com>
// +----------------------------------------------------------------------

// 应用公共文件
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
/*
 * 加密
 * $pass="未加密密码"
 */
function encryptPass($pass){
    $pass=md5(md5($pass."rendao")."rendao");
    return $pass;
}
// 快捷 Json 返回
function retJson($data = array(), $code = 200, $msg = ''){
    return json(['data' => $data, 'code' => $code, 'msg' => $msg]);
}
/*
 * 判断数据库操作是否成功
 *  $Database 数据库操作
 *  return 失败成功都返回
 * $data 返回数据
 */
function setDatabase($Database=false,$retData='操作',$data=[]){
    if (!$Database){
        return retJson($data,201,$retData.'失败');

    }
    return retJson($data,200,$retData.'成功');
}
/*
 * //高德经纬度==转换==》百度经纬度
 * $gg_lon  高德经度
 * $gg_lat  高德纬度
 */

function bd_encrypt($gg_lon,$gg_lat){
    $x_pi = 3.14159265358979323846264338 * 3000.0 / 180.0;
    $x = $gg_lon;
    $y = $gg_lat;
    $z = sqrt($x * $x + $y * $y) + 0.00023 * sin($y * $x_pi);
    $theta = atan2($y, $x) + 0.000003 * cos($x * $x_pi);
    $bd_lon = $z * cos($theta) + 0.0065;
    $bd_lat = $z * sin($theta) + 0.006;
    // 保留小数点后六位
    $data['bd_lon'] = round($bd_lon, 10);
    $data['bd_lat'] = round($bd_lat, 10);
    return $data;
}
/*
 * 判断数据库操作是否成功
 *
 *  只有失败返回
 */
function setDatabaseDef($Database=false,$retData='操作失败'){
    if (!$Database){
        retJson('',201,$retData)->send();
        exit();
    }
}
function export($data = array(), $headlist = array(), $fileName) {
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="'.$fileName.'.csv"');
    header('Cache-Control: max-age=0');

    //打开PHP文件句柄,php://output 表示直接输出到浏览器
    $fp = fopen('php://output', 'a');

    //输出Excel列名信息
    foreach ($headlist as $key => $value) {
        //CSV的Excel支持GBK编码，一定要转换，否则乱码
        $headlist[$key] = iconv('utf-8', 'gbk', $value);
    }

    //将数据通过fputcsv写到文件句柄
    fputcsv($fp, $headlist);

    //计数器
    $num = 0;

    //每隔$limit行，刷新一下输出buffer，不要太大，也不要太小
    $limit = 100000;

    //逐行取出数据，不浪费内存
    $count = count($data);
    for ($i = 0; $i < $count; $i++) {

        $num++;

        //刷新一下输出buffer，防止由于数据过多造成问题
        if ($limit == $num) {
            ob_flush();
            flush();
            $num = 0;
        }

        $row = $data[$i];
        foreach ($row as $key => $value) {
            $row[$key] = iconv('utf-8', 'gbk', $value);
        }

        fputcsv($fp, $row);
    }

}
/*
 * 检查数据是否存在（暂时用来检查唯一性）
 *  $table 数据库的表名
 *  $where 判断条件
 *  $notId  去掉某一个id（编辑使用）[0]=>数据表字段 ，[1]=>值 （某id）
 */
function sole($table='',$where=[],$notId=[],$name='账号'){

    if ($notId){//编辑数据时使用
        $getSole = \think\Db::table($table)
            ->where($where)
            ->where($notId[0],'<>',$notId[1])
            ->find();
    }else{//新增数据时使用
        $getSole = \think\Db::table($table)
            ->where($where)
            ->find();
    }

    if ($getSole){
        retJson('',201,$name.'已有')->send();
//        return json($return)->send();
        exit();
    }


}
//阿里短信函数--验证码，$mobile为手机号码，$code为自定义随机数
function sendMsg($mobile,$code)
{
    //这里的路径EXTEND_PATH就是指tp5根目录下的extend目录，系统自带常量。alisms为我们复制api_sdk过来后更改的目录名称
    require_once EXTEND_PATH . 'aliyunsms/vendor/autoload.php';
    Config::load();//加载区域结点配置


//    $accessKeyId = 'LTAIm4gVPSm6llwP';  //阿里云短信获取的accessKeyId
    $accessKeyId = 'LTAIPYf0xttsSVdz';  //阿里云短信获取的accessKeyId

//    $accessKeySecret = 'PnR2F6oQ3ojI1I63jDrItpe4G4PmuX';    //阿里云短信获取的accessKeySecret
    $accessKeySecret = 'enVFIN3yy50XSfWoOtgLzOaAhwnB1m';    //阿里云短信获取的accessKeySecret

    //这个个是审核过的模板内容中的变量赋值，记住数组中字符串code要和模板内容中的保持一致
    //比如我们模板中的内容为：你的验证码为：${code}，该验证码5分钟内有效，请勿泄漏！
    $templateParam = array("code" => $code);           //模板变量替换

//    $signName = '长乐乡扶贫云'; //这个是短信签名，要审核通过
    $signName = '河北北斗'; //这个是短信签名，要审核通过

//    $templateCode = 'SMS_138076983';   //短信模板ID，记得要审核通过的
    $templateCode = 'SMS_160577461';   //短信模板ID，记得要审核通过的


    //短信API产品名（短信产品名固定，无需修改）
    $product = "Dysmsapi";
    //短信API产品域名（接口地址固定，无需修改）
    $domain = "dysmsapi.aliyuncs.com";
    //暂时不支持多Region（目前仅支持cn-hangzhou请勿修改）
    $region = "cn-hangzhou";

    // 初始化用户Profile实例
    $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
    // 增加服务结点
    DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
    // 初始化AcsClient用于发起请求
    $acsClient = new DefaultAcsClient($profile);

    // 初始化SendSmsRequest实例用于设置发送短信的参数
    $request = new SendSmsRequest();
    // 必填，设置雉短信接收号码
    $request->setPhoneNumbers($mobile);

    // 必填，设置签名名称
    $request->setSignName($signName);

    // 必填，设置模板CODE
    $request->setTemplateCode($templateCode);

    // 可选，设置模板参数
    if ($templateParam) {
        $request->setTemplateParam(json_encode($templateParam));
    }

    //发起访问请求
    $acsResponse = $acsClient->getAcsResponse($request);

    //返回请求结果
    $result = json_decode(json_encode($acsResponse), true);

    return $result;
}

//阿里短信函数，$mobile为手机号码，$code为自定义随机数
/*
 * $nickname=设备昵称
 * $time  时间
 * $data  出/入
 * $en_name围栏昵称
 */
function sendMsg_dx($mobile,$nickname,$time,$data,$en_name)
{
    //这里的路径EXTEND_PATH就是指tp5根目录下的extend目录，系统自带常量。alisms为我们复制api_sdk过来后更改的目录名称
    require_once EXTEND_PATH . 'aliyunsms/vendor/autoload.php';
    Config::load();//加载区域结点配置


//    $accessKeyId = 'LTAIm4gVPSm6llwP';  //阿里云短信获取的accessKeyId
    $accessKeyId = 'LTAIPYf0xttsSVdz';  //阿里云短信获取的accessKeyId

//    $accessKeySecret = 'PnR2F6oQ3ojI1I63jDrItpe4G4PmuX';    //阿里云短信获取的accessKeySecret
    $accessKeySecret = 'enVFIN3yy50XSfWoOtgLzOaAhwnB1m';    //阿里云短信获取的accessKeySecret

    //这个个是审核过的模板内容中的变量赋值，记住数组中字符串code要和模板内容中的保持一致
    //比如我们模板中的内容为：你的验证码为：${code}，该验证码5分钟内有效，请勿泄漏！
    $templateParam = array("nickname" => $nickname,"time" => $time,"data" => $data,"en_name" => $en_name,);           //模板变量替换

//    $signName = '长乐乡扶贫云'; //这个是短信签名，要审核通过
    $signName = '北斗导航位置服务有限公司'; //这个是短信签名，要审核通过

//    $templateCode = 'SMS_138076983';   //短信模板ID，记得要审核通过的
    $templateCode = 'SMS_160765273';   //短信模板ID，记得要审核通过的


    //短信API产品名（短信产品名固定，无需修改）
    $product = "Dysmsapi";
    //短信API产品域名（接口地址固定，无需修改）
    $domain = "dysmsapi.aliyuncs.com";
    //暂时不支持多Region（目前仅支持cn-hangzhou请勿修改）
    $region = "cn-hangzhou";

    // 初始化用户Profile实例
    $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
    // 增加服务结点
    DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
    // 初始化AcsClient用于发起请求
    $acsClient = new DefaultAcsClient($profile);

    // 初始化SendSmsRequest实例用于设置发送短信的参数
    $request = new SendSmsRequest();
    // 必填，设置雉短信接收号码
    $request->setPhoneNumbers($mobile);

    // 必填，设置签名名称
    $request->setSignName($signName);

    // 必填，设置模板CODE
    $request->setTemplateCode($templateCode);

    // 可选，设置模板参数
    if ($templateParam) {
        $request->setTemplateParam(json_encode($templateParam));
    }

    //发起访问请求
    $acsResponse = $acsClient->getAcsResponse($request);

    //返回请求结果
    $result = json_decode(json_encode($acsResponse), true);

    return $result;
}
/**
 * 计算两个坐标之间的距离(米)
 * @param float $fP1Lat 起点(纬度)
 * @param float $fP1Lon 起点(经度)
 * @param float $fP2Lat 终点(纬度)
 * @param float $fP2Lon 终点(经度)
 * @return int
 */
function distanceBetween($fP1Lat, $fP1Lon, $fP2Lat, $fP2Lon){
    $fEARTH_RADIUS = 6378137;
    //角度换算成弧度
    $fRadLon1 = deg2rad($fP1Lon);
    $fRadLon2 = deg2rad($fP2Lon);
    $fRadLat1 = deg2rad($fP1Lat);
    $fRadLat2 = deg2rad($fP2Lat);
    //计算经纬度的差值
    $fD1 = abs($fRadLat1 - $fRadLat2);
    $fD2 = abs($fRadLon1 - $fRadLon2);
    //距离计算
    $fP = pow(sin($fD1/2), 2) +
        cos($fRadLat1) * cos($fRadLat2) * pow(sin($fD2/2), 2);
    return intval($fEARTH_RADIUS * 2 * asin(sqrt($fP)) + 0.5);
}
/*
   * post 发送JSON 格式数据
   * @param $url string URL
   * @param $data_string string 请求的具体内容
   * @return array
   *      code 状态码
   *      result 返回结果
   */
function post_json_data($url, $data_string) {
    //初始化
    $ch = curl_init();
    //设置post方式提交
    curl_setopt($ch, CURLOPT_POST, 1);
    //设置抓取的url
    curl_setopt($ch, CURLOPT_URL, $url);
    //设置post数据
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    //设置头文件的信息作为数据流输出
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json; charset=utf-8',
            'Content-Length: ' . strlen($data_string))
    );
    ob_start();
    //执行命令
    curl_exec($ch);
    $return_content = ob_get_contents();
    ob_end_clean();
    $return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    return array('code'=>$return_code, 'result'=>$return_content);
}
/*
     * 下载文件
     */
function downFile($url,$path){
    $arr=parse_url($url);
    $fileName=basename($arr['path']);
    $file=file_get_contents($url);
    file_put_contents($path.$fileName,$file);
    return $fileName;
}